package Controller;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

import root.*;
import View.*;

/**
 * La classe EcouteurDeBoutonAMenu ecoute les action faite sur les boutons
 * de la barre de selection (bouton et sous menu du bouton
 *
 */

public class EcouteurDeBoutonAMenu extends MouseAdapter implements ActionListener{
	private Curseur curseur;

	public EcouteurDeBoutonAMenu(LeftPanel lp, Curseur c) {
		curseur = c;
		BoutonAMenu[] listeboutons=lp.getListeBoutons();
		for(int i=0; i< listeboutons.length ; i++) {
			listeboutons[i].addActionListener(this);
			listeboutons[i].addMouseListener(this);
			listeboutons[i].addMenuListener(this);
			updateCurseur(listeboutons[i], listeboutons[i].getActionCommand());
		}
	}


	/** Affiche le menu contextuel du bouton si clic droit
	 *
	 */
	public void mousePressed(MouseEvent e) {
		BoutonAMenu bam = (BoutonAMenu) e.getSource();
		if(e.getButton() == MouseEvent.BUTTON3) {
			if(e.isPopupTrigger()) {
				bam.getMenu().show(e.getComponent(), 0,
				                   ((Component) e.getSource()).getHeight());
			}
		}
		bam.getParent().repaint();
	}

	/** Affiche le menu contextuel du bouton si clic droit
	 *
	 */
	public void mouseReleased(MouseEvent e) {
		BoutonAMenu bam = (BoutonAMenu) e.getSource();
		if(e.getButton() == MouseEvent.BUTTON3) {
			if(e.isPopupTrigger()) {
				bam.getMenu().show(e.getComponent(), e.getX(), e.getY());
			}
		}
	}
	//////////////////////////////////////////


	public void actionPerformed(ActionEvent e) {
		//ecoute le menu + le clic gauche
		if (e.getSource().getClass().getName().equals("View.BoutonAMenu")) { //si on clic sur le bouton
			updateCurseur((BoutonAMenu) e.getSource(), e.getActionCommand());
		} else if (e.getSource().getClass().getName().equals("javax.swing.JRadioButtonMenuItem")){
			//si on clic sur un elm du menu
			System.out.println("name : " + e.getSource().getClass().getName());
			JRadioButtonMenuItem rbmi = (JRadioButtonMenuItem) e.getSource();
			JPopupMenu pm = (JPopupMenu) rbmi.getParent();
			BoutonAMenu bam = (BoutonAMenu) pm.getInvoker();
			updateCurseur(bam, e.getActionCommand());
			bam.setSelection();
			bam.setActionCommand(e.getActionCommand());
		} else {
			new UnsupportedOperationException(getClass().getName()+" "+e.getClass().getName());
		}
	}


	/**  Mise a jour du curseur en fonction du bouton qui a ete clique
	 *
	 */
	public void updateCurseur(BoutonAMenu bam, String s) {
		Color couleur;
		//System.out.println("Update de curseur to " + s);
		try {
			couleur = MapObjects.getCouleur(s);
		} catch (Exception e) {
			System.out.println("update curseur error :" + e);
			couleur=new Color(127,127,127);
		}
			bam.setBackground(couleur);
			curseur.setInfra(s);
			bam.repaint();
	}
}
